#include <stdio.h>
#include <stdlib.h>

// 单链表结构
typedef struct node
{
    int data;
    struct node *next;
} LNode, *LinkList;

// 函数声明
LinkList Creat_LinkList1();
int getelem(LinkList H, int i);
LinkList insert_LinkList(LinkList H, int i, int num);

// 主函数
int main(void)
{
    // 定义头指针变量： LinkList H
    // 创建单链表 插入数据 （退出数据 -1）
    LinkList H = Creat_LinkList1();
    // 查找数据 返回该数据
    int result = getelem(H, 2);
    // 插入数据 参数（执行操作的单链表，插入位置，插入数字）
    // H = insert_LinkList(H, 3, 12);

    return 0;
}

// 初始化单链表 终止数据为-1
LinkList Creat_LinkList1()
{
    // 定义L为空列表
    LinkList L = NULL;

    LNode *s;
    int x, flag = -1;
    scanf("%d", &x);
    // flag 为根据实际情况设定的结束数据输入的标志数据
    while (x != flag)
    {
        s = (LNode *)malloc(sizeof(LNode));
        // 申请结点,添加数据
        s->data = x;
        s->next = L;
        // 将结点s插入到链表头部
        L = s;
        scanf("%d", &x);
    }
    return L;
}

// 单链表查找(查找第几个元素??从后向前建立连接)
int getelem(LinkList H, int i)
{
    LinkList p;
    p = H->next;
    int j = 1;
    while ((p->next != NULL) && (j < i))
    {
        p = p->next;
        j++;
    }
    if (j = i)
        return (p->data);
    else
        return 0;
}

// !! 由于单链表的数据特性，当采用头插法时，无法进行对应元素的插入 !!
